package com.test.service.Impl;

import com.test.Aspect.BusinessException;
import com.test.dao.LoginMapper;
import com.test.domain.User;
import com.test.enums.Replay;
import com.test.enums.ReplayCode;
import com.test.service.LoginService;
import com.test.utils.GetOppenidUtil;
import com.test.utils.ReplayUtil;
import com.test.utils.isNullObjectUtil;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;

/**
 * Login
 *
 * @author HY
 * 2021/05/17 9:23
 **/

@Service
public class LoginServiceImpl implements LoginService {

    @Resource
    private LoginMapper loginMapper;

    @Override
    public Replay isOppenid(String js_code) {

        if (js_code == null || js_code.equals("")){
            throw new BusinessException(ReplayCode.REQUIREDNULL_ERR);
        }

        String oppenid = GetOppenidUtil.get(js_code);

        if (oppenid == null || oppenid.equals("")){
            throw new BusinessException(ReplayCode.GetOppenid_ERR);
        }

        User user = loginMapper.getUser(oppenid);

        //返回值设置 0-注册成功  1-注册失败  2-已有用户，需要填写资料   3-用户已存在，登陆成功
        if (isNullObjectUtil.isEmpty(user)){
            //将该用户注册进数据库，并用keyProperty将id传回user1
            // useGeneratedKeys="true"  告诉mybatis使用数据库主键自动生成策略生成Id，
            //   keyProperty="id"    告诉mybatis要把自动生成的主键id赋值给传入的参数对象里的id属性
            //        那么就可以通过传入的参数对象里的属性id获得生成的主键了
            User user1 = new User(oppenid);
            int res = loginMapper.addUser(user1);
            if (res > 0){
                return ReplayUtil.success();
            }
            return ReplayUtil.success("用户注册成功",user1);
        }else if(user.getName() == null
                || user.getNumber() == null
                || user.getPhone() == null){
            return ReplayUtil.success("需要填写资料",user);
        }

        return ReplayUtil.success("登陆成功",user);

    }

    @Override
    public Replay addUser(User user) {

        if (loginMapper.updateUser(user) > 0){
            return ReplayUtil.success("注册成功");
        }
        return ReplayUtil.error(ReplayCode.err);
    }
}
